package com.whfc.common.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.apache.commons.lang3.StringUtils;

import java.util.List;

/**
 * @author xuguocheng
 * @desc JSON工具类
 * @date 2019-07-22
 */
public class JSONUtil {

    /**
     * 默认序列化
     *
     * @param obj
     * @return
     */
    public static String toDefaultString(Object obj) {
        return JSON.toJSONString(obj);
    }

    /**
     * 序列化
     * 打印空字段
     * 可读的日期格式
     *
     * @param obj
     * @return
     */
    public static String toString(Object obj) {
        return JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.DisableCircularReferenceDetect);
    }

    /**
     * 返回jsonString
     * 格式化的
     * 打印空字段
     * 可读的日期格式
     *
     * @param obj
     * @return
     */
    public static String toPrettyString(Object obj) {
        return JSON.toJSONString(obj, SerializerFeature.PrettyFormat, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.DisableCircularReferenceDetect);
    }

    /**
     * 反序列化
     *
     * @param text
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T parseObject(String text, Class<T> clazz) {
        if (StringUtils.isEmpty(text)) {
            return null;
        }
        return JSON.parseObject(text, clazz, new Feature[0]);
    }

    /**
     * 反序列化
     *
     * @param text
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> List<T> parseArray(String text, Class<T> clazz) {
        return JSON.parseArray(text, clazz);
    }


    /**
     * httpFrom表单转换json
     *
     * @param text
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T parseHttpFromToObject(String text, Class<T> clazz) {
        text = "{\"" + text.trim().replace("=", "\":\"").replace("&", "\",\"") + "\"}";
        return parseObject(text, clazz);
    }

}
